﻿using Application_Core.Arbeitsplan_Component.Data_Access_Layer;
using Application_Core.Arbeitsplan_Component.Data_Access_Layer.Implementations;
using System;
using System.Collections.Generic;
using Utility.Global.Utilities;
using Utility.Persistence_Service;

namespace Application_Core.Arbeitsplan_Component.Business_Logic_Layer
{
    internal class ArbeitsplanComponentBusinessLogicImpl : ArbeitsplanComponentBusinessLogic
    {
        private readonly UnitOfWork unitOfWork;        
        private readonly ArbeitsplanRepository arbeitsplanRepo;
        private readonly VorgangRepository vorgangRepo;

        public ArbeitsplanComponentBusinessLogicImpl(UnitOfWork unitOfWork)
        {
            this.unitOfWork = unitOfWork;
            this.arbeitsplanRepo = new ArbeitsplanRepositoryImpl(unitOfWork);
            this.vorgangRepo = new VorgangRepositoryImpl(unitOfWork);
        }

        public TimeSpan BerechneFertigungszeit(Arbeitsplan arbeitsplan, int menge)
        {
            TimeSpan fertigungszeit = new TimeSpan(0);

            List<Vorgang> vorgänge = this.vorgangRepo.FindByArbeitsplan(arbeitsplan);
            foreach (Vorgang vorgang in vorgänge)
            {
                fertigungszeit += vorgang.Rüstzeit;
                fertigungszeit += vorgang.Maschinenzeit;
                fertigungszeit += vorgang.Personenzeit;
            }

            return fertigungszeit;
        }
    }
}
